// 封装通用的接口调用模块
import axios from 'axios'
import store from '@/store'
import router from '@/router'
import { removeToken } from './auth'
// 基准地址
// const baseURL = 'http://ihrm-java.itheima.net/api/'
const baseURL = process.env.VUE_APP_BASE_API
// 创建一个独立的实例
// create an axios instance
const service = axios.create({
  baseURL: baseURL
})

// 添加响应拦截器
service.interceptors.response.use(function(response) {
  // 对响应数据做点什么
  return response.data
}, function(error) {
  // 对响应错误做点什么    判断是否为token失效的问题
  if (error.response.status === 401 && error.response.data.code === 10002) {
    // token已经失效，删除用户的token，跳转到登录页
    store.commit('SET_TOKEN', '')
    store.commit('updaterUserInfo', null)
    removeToken()
    // 跳转到登录页
    router.push('/login')
  }
  return Promise.reject(error)
})
// 添加请求拦截器
service.interceptors.request.use(function(config) {
  // 在发送请求之前做些什么
  if (store.state.user.token) {
    // 如果token存在 注入token
    // config.headers = {
    //   Authorization: `Bearer ${store.state.user.token}`
    // }
    config.headers.Authorization = `Bearer ${store.state.user.token}`
  }
  return config
}, function(error) {
  // 对响应错误做点什么
  return Promise.reject(error)
})

// 封装通用的接口调用函数
// 按照这种方式封装时，无论何种请求方式，参数都用data传递，更加方便
export default (options) => {
  let key = null
  if (options.method) {
    // method属性是存在的
    key = options.method.toUpperCase() === 'GET' ? 'params' : 'data'
  } else {
    // 如果没有传递method属性，默认采用get请求方式
    key = 'params'
  }
  // console.log(key)
  return service({
    // 短路运算
    method: options.method || 'get',
    url: options.url,
    // data:'',    // data用于传递出get之外的所有请求（put、delete、post）
    // params仅仅处理get请求参数
    // params:''
    // ES6规则：对象的key可以是动态的变量
    [key]: options.data
  })
}
